package com.jacob.androidframe.util;

import com.jacob.androidframe.controls.ApplicationExtend;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;

public class UtilPermission
{
	/**
	 * 检查程序是否有“读写外置存储”的权限。
	 * 默认使用pContext进行检查。
	 * 若pContext==null，或者检查时出现异常，则会使用程序的全局Context对象进行检查。
	 * 若再出现异常，则返回false。
	 * <p>
	 * 注意：
	 * <p>
	 * 1. 如果程序的minSdkVersion和targetSdkVersion都<=3的话，系统会自动给程序授予此权限。（因为这个权限是在API Level 4中引入的）
	 * <p>
	 * 2. 从API level 19开始，读写在外置存储上的私有目录是不需要此权限的。（这个私有目录指的是：通过Context.getExternalFilesDir(String)方法，或Context.getExternalCacheDir()方法返回的目录）
	 * 
	 * @param pContext
	 * @param pPermission
	 * @return
	 */
	public static boolean hasExternalStoragePermission(Context pContext)
	{
		return checkPermission(pContext, Manifest.permission.WRITE_EXTERNAL_STORAGE);
	}

	/**
	 * 检查程序是否有权限。
	 * 默认使用pContext进行检查。
	 * 若pContext==null，或者出现异常，则会使用程序的全局Context对象进行检查。
	 * 若再出现异常，则返回false。
	 * 
	 * @param pContext
	 * @param pPermission
	 * @return
	 */
	private static boolean checkPermission(Context pContext, String pPermission)
	{
		int _Result;

		try {
			_Result = pContext.checkCallingOrSelfPermission(pPermission);
		} catch (Exception e) {
			try {
				_Result = ApplicationExtend.getInstance().checkCallingOrSelfPermission(pPermission);
			} catch (Exception e1) {
				_Result = PackageManager.PERMISSION_DENIED;
			}
		}

		return _Result == PackageManager.PERMISSION_GRANTED;
	}
}
